/**
 * @Project : algorithm-learning
 * @Author : Ruoyu Wang
 * @User : Momenta
 * @DateTime : 2024/4/10 17:54
 */

//编写一个程序为某云服务计算客户话单，输入为某云服务的计费日志和各种计费因子的计费单价的列表，计费日志内容包含时间戳、客户标识、计费因子、计费时长4个字段。日志中如果同一客户同一计费因子在相同时间戳上报多次话单只能计费一次，选先上报的日志计费。计算每个客户的话单总费用。
//
//输入
//第1行表示计费日志的条数n，是一个正整数，范围是1<=n<=1000
//第2到n+1行表示云服务的计费日志，共4列，第1列表示时间戳(是一个数字字符串，长度为10) 、第2列表示客户标识(是一个字符串，长度为1-16)，第3列表示计费因子 (是一个字符串，长度为1-16，计费因子查不到时认为计费因子单价是0），第四列表示计费时长时长（范围为0-100，当计费时长不在范围内要认为是计费日志有问题，当成计费为0处理)，这4个字段使用迈号分隔
//第n+2行表示计费因子的数量m，m是一个正整数，范围是1<=m<=100
//第n+3到n+3+m行表示各种计费因子的计费单价的列表，该表有2列,第1列表示计费因子 (是一个字符串，长度为1-16)，第2列表示单价(是一个正整数，范围为1~100)，这2个字段使用逗号分
//输出
//每个客户的话单总费用,共2列，第1列表示客户名，第2列表示话单费用，2列用逗号分割，输出按客户标识字典序升序排序
//
//样例
//
//输入
//5
//1627845600,client1,factorA,10
//1627845605,client2,factorB,15
//1627845610,ciient1,factorA,5
//1627845610,client1,factorB,8
//1627845620.client2,factorB,20
//2
//factorA,5
//factorB,7
//输出
//client1,131
//client2，245
//
//思路与代码
//
//本题题目量特别多，属于是阅读理解了，理解题目就简单。
//通过stringstream对输入的字符串进行拆分；
//通过set进行判断是否存在相同的时间戳客户和计费因子；
//通过map进行存储不同的客户和计费因子；
//最后合并统计出各个用户的消费。

#include <sstream>
#include <algorithm>
#include "iostream"
#include "map"
#include "set"
#include "unordered_map"
#include "vector"

using namespace std;

int main() {
    int n;
    cin >> n;

    string a[5];

    map<pair<string, string>, int> h1;

    set<string> ses;

    while (n--) {
        string s, t;
        cin >> s;

        stringstream ss(s);
        int k = 0;
        while (getline(ss, t, ','))
            a[k++] = t;

        string ts = a[0] + a[1] + a[2];

        if (ses.count(ts)) continue;
        else ses.insert(ts);

        int tt = stoi(a[3]);
        if (tt < 0 || tt > 100) continue;

        h1[{a[1], a[2]}] += tt;
    }

    int m;
    cin >> m;
    unordered_map<string, int> h2;

    while (m--) {
        string s, t;
        cin >> s;

        int k = 0;
        stringstream ss(s);
        while (getline(ss, t, ','))
            a[k++] = t;

        h2[a[0]] = stoi(a[1]);
    }

    map<string, int> h3;
    for (auto &[k, v]: h1) {
        string client = k.first, factor = k.second;
        h3[client] += (h2[factor] * v);
    }
    vector<pair<string, int>> res;
    for (auto &[k, v]: h3) res.push_back({k, v});

    sort(res.begin(), res.end());

    for (int i = 0; i < res.size(); i++)
        cout << res[i].first << "," << res[i].second << endl;

    return 0;
}